package com.auicyh.tylb.utils;

import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;

import java.io.IOException;

/**
 * 作者：  Ocean 2018/2/28 14:41
 * 信息：  Aui com.ads.oil.mode
 * 功能：  语音播报便利类
 * 邮箱：   1126067113@qq.com
 * 修改人：
 * 公司: 北京天元陆兵汽车科技有限公司
 * @author Ocean
 */

public class SoundPoolHelper {
    /** Asset管理者 */
    private AssetManager mAssetManager;
    /** 女声目录 */
    private String mAudioAddress = "audio/girl";
    /** 文件格式 后缀 */
    private String mSuffix = ".wav";
    /** 最大播放数量 */
    private static final int MAX_SOUNDS = 1;
    private SoundPool mSoundPool;

    public SoundPoolHelper() {
    }

    public SoundPoolHelper(Context context) {
        mAssetManager = context.getAssets();
        // SoundPool可以通过Builder创建，但为了兼容旧版本，这里还是使用旧的构造方法
        // 同时播放的文件数量  音频流类型
        mSoundPool = new SoundPool(MAX_SOUNDS, AudioManager.STREAM_SYSTEM, 0);
    }


    /**
     * 文件载入SoundPool待播
     * @param fileName 文件名待后缀
     * @throws IOException IOException
     */
    public Integer load(String fileName) throws IOException {
        AssetFileDescriptor afd = mAssetManager.openFd(mAudioAddress + "/" + fileName);
        // 调用load把文件载入SoundPool待播
        return mSoundPool.load(afd, 1);

    }


    /**
     * 播放音频
     * @param soundID soundID
     */
    public void play(Integer soundID) {
        if (soundID == null) {
            return;
        }
        mSoundPool.play(soundID, 1.0f, 1.0f, 1, 0, 1.0f);
    }


    /***
     * 开始播放
     * @param fileName 文件名
     */
    public Integer startPlay(String fileName) {
        // 文件载入SoundPool待播
        try {
            Integer integer = load(fileName + mSuffix);
            mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
                @Override
                public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                    play(sampleId);
                }
            });
            return integer;
        } catch (IOException e) {
            return null;
        }
    }

    public void stop(Integer integer) {
        if (integer != null) {
            mSoundPool.stop(integer);
        }

    }

    /**
     * 播报完成后回收资源
     */
    public void release() {
        mSoundPool.release();
    }

    public SoundPool getSoundPool() {
        return mSoundPool;
    }


    public String getAudioAddress() {
        return mAudioAddress;
    }

    public void setAudioAddress(String audioAddress) {
        mAudioAddress = audioAddress;
    }

    public String getSuffix() {
        return mSuffix;
    }

    public void setSuffix(String suffix) {
        mSuffix = suffix;
    }
}
